2.3 路由冲突及其解决方法
在浏览器发请求后,django内部首先会做URL的匹配,匹配是按照在urlpatterns中定义的先后顺序的, 即从上往下一个path一个path的匹配,只要匹配成功就不再往下匹配了。
浏览器请求的URL是:articles/2023:
•从上往下匹配, 匹配上的第一个就是path(“ariticles <year>”,year_archive)
•于是你看到的页面永远都是year_archive这个视图函数的结果。
解决方法
很简单,把具体的URL匹配放在抽象在URL匹配规则前面,这样从上往下匹配时,遇到articles/2023就会第一个匹配到special_case_2023
def year_archive(requeet,year): # 传入动态URL(yaer,month)
return HttpResponse( "精忠报国" ) #网面显示的是字符精忠报国“
urlpatterns = [
path( 'admin/' , admin.site.urls),
path( 'hello' , hello),
path( 'ariticles/2023' , special_case_2023), #将位置往前置
path( 'ariticles/<year>' , year_archive ) , #设置动态URL,两个参数要与传入的参数一样。
]
# 本次增加地址: path('ariticles/<year>/<month>3', yearmonth_archive),